perm filename DISREM.SAI[VIS,HPM]2 blob sn#252586 filedate 1976-12-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY
C00007 ENDMK
C⊗;
ENTRY;
BEGIN "DISREM"
DEFINE MMMM="2";
REQUIRE "ACCEL.SAI[1,DBG]" SOURCE_FILE;
INTEGER PP,PH,MG,MR,M1,M2,M3,M4,M;
INTEGER I,J,K;

COMMENT  PQINIT computes several quantities depending on the order of the
	 polynominals and needed in subsequent calculations;
INTERNAL PROCEDURE PQINIT (INTEGER P,Q);
BEGIN
PP←P;
PH ← (P+1) DIV 2;
MG ← (P+1)*(P+2)%2;
MR ← 0 MAX ((Q+1) DIV 2 - PH);
M1←MG+1;
M2←2*MG;
M3←M2+1;
M4←M3+1;
M←M2+MR
END;


COMMENT  DMODEL uses the values of X and Y to compute the coefficients of
	 the parameters and inserts them into the A and B arrays, which
	 can be used to obtain the corrections in X and Y, respectively;
SIMPLE PROCEDURE DMODEL (REAL ARRAY A,B; REAL X,Y);
   BEGIN
   REAL XX,XY,YY,YDX,RR,RRX,RRY;
   IF X=0 THEN YDX←0 ELSE YDX←Y/X;
   I←1;
   A[1]←B[M1]←XX←1;
   YY←1;
   FOR J←1 STEP 1 UNTIL PP DO
      BEGIN
      I←I+1;
      XX←XX*X;
      YY←YY*Y;
      A[I]←B[MG+I]←XY←XX;
      FOR K←1 STEP 1 UNTIL J-1 DO
	 BEGIN
      	 I←I+1;
       	 A[I]←B[MG+I]←XY←XY*YDX;
         END;
      I←I+1;
      A[I]←B[MG+I]←YY;
      END;
   IF MR>0 THEN
      BEGIN
      RR ← X↑2 + Y↑2;
      XY←RR↑PH;
      RRX←X*XY;
      RRY←Y*XY;
      A[M3]←RRX;
      B[M3]←RRY;
      FOR I←M4 STEP 1 UNTIL M DO
         BEGIN
         A[I] ← RRX ← RRX*RR;
         B[I] ← RRY ← RRY*RR;
         END;
      END;
   END;



COMMENT  DISREM uses the distortion calibration coefficients G as computed by
	 DISCAL to convert the N points XI,YI into the N points XO,YO.  (XO and YO
	 can refer to the same arrays as XI and YI.)  If TOL<0, the forward
	 conversion is done (X,Y to XP,YP in DISCAL).  If TOL≥0, the inverse
	 conversion is done (XP(	3@Ai↑A`Y2AS8A	∪'
β_RX↓C]HAQ∨_ASLAiQJ↓G←]m∃eOK]
J~∀∩↓i←YKIC]GJQS\Aa≡Y3≡$AM←d↓iKe[%]CiS9NAiQ∀ASiKICiS←9f@Qo%iPAB↓[CqS5kZ~∀$A←L@D`ASi∃eCiS=]fR\@Q!#%≥∪(A5kghA	JAGC1YKHA	KM←e∀AiQSLAae←
KIke∀Ai↑~(∩AG←5akiJ↓iQJA→k]Gi%←]fA=LA A¬]HA"0Ak]Y∃gfAi!SfAQ¬fACYIKCIr↓EKK\4∀∩AI=]JAEdAGCY1S]NA⊃∪'πβ0Rv~∃%≥)%9β_A!I∨π	U%
A	%'%~Q∪≥)∃∂$A8vA%¬_A)∨0v~∀∪Iβ_A¬%%β2↓∞Y1∩13∩Y1<Y3≡Rl~∀@@↓¬∂∪8~∀@@↓∨/≤AIβ_A¬%%β2↓αY¬6Dthi:l~∀@@↓'β
↓∨/≤AIβ_A¬%%β2↓12Y	lbte:l~∀@@↓%β_↓10Y3dY)∨_Hv~∀@A∪≥)∃∂$AA≥(Y∪Q$v~(@@A)=_e?)=→<dv4∀@@A→∨$A!9)>bAM) @DA+≥)%_A≤A⊃≡~∀@@@@A	∂∪≤E!∨∪9)&D~(@@@@A136E;?1∪m!≥):l~∀@@@@A1e6e;?e∪7!≥Q:v~∀@@@@↓
∨$A%)%>DA')@@bA+9)∪_@D`A	≡4∀@@@@@@@↓¬∂∪8~∀@@@@@@A	≠∨⊃_Qα1∧Y13lc:Y1e6e:Rl~∀@@@@@@A11>@v~∀@@@@@@A
∨HA∪>b↓') bA+≥Q∪_A≠≤XA~f↓') bA+≥Q∪_A~↓	≡~∀@@@@@@@@@@@@A10A|A10@,Aβ7∪tU∂7∪tv~∀@@@@@@A33|`v~∀@@@@@@A
=$A∪?4bA')∃ @bAU≥)∪_↓~A	≡4∀@@@@@@@@@@@@@A3dA>A3d@VA¬m∪:U∂m∪:v~(@@@@@@@A%A)∨0x`A)!≤~∀@@@@@@@@A¬∂%≤~∀@@@@@@@@@↓1∨7!9):A>↓1∪7!9):W1`v~∀@@@@@@@@@↓3∨7!9):A>↓3∪7!9):W3dv~∀@@@@@@@@@↓π∨≥)%≥+
@	!∨∪≥Q&Dv~(@@@@@@@@@A≥⊂~∀@@@@@@A→'∀~∀@@@@@@@@@A	∂∪≤4∀@@@@@@@@@A1`A>A1%7!≥)t[10v4∀@@@@@@@@@A3dA>A3%7!≥)t[32v4∀@@@@@@@@@A	lc:A>↓10[1e6c:v4∀@@@@@@@@@A	le:A>↓32[1e6e:v4∀@@@@@@@@@Aβ
π→Iβ)
PHY12Y⊂Y∪)HzbY⊗$v~∀@@@@@@@@@↓≥λv4∀@@@@@@@↓∪@Q⊃6c;<HW	6eu<dRyQ∨_dAQ⊃≤A⊃∨≥
v4∀@@@@@@@↓≥λv4∀@@@@A1∨m!≥);⎇136ctv~∀@@@@Ae∨7!≥Q;?13le:v~(@@@@A≥λE!∨∪9)&Dv4∀@@A∃≥λ@E⊃∪'%4Dv~∃∃≥λ@E⊃∪'%4Dv~∀